package slcu.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import slcu.model.Coordinador;
import slcu.model.Director;
import slcu.model.PersonalDelMinisterio;
import slcu.model.Profesor;
import slcu.service.CoordinadorLocalServiceUtil;
import slcu.service.DirectorLocalServiceUtil;
import slcu.service.PersonalDelMinisterioLocalServiceUtil;
import slcu.service.ProfesorLocalServiceUtil;

import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.events.ActionException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.User;
import com.liferay.portal.service.RoleLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;

public class PostLogin extends Action {

	private static Log _log = LogFactoryUtil.getLog(PostLogin.class);

	@Override
	public void run(HttpServletRequest request, HttpServletResponse response)
			throws ActionException {

		try {
			
			User user = UserLocalServiceUtil.getUser(Long.valueOf(request.getRemoteUser()));

			// es personal ministerio?
			Role rolePersonalDelMinisterio = RoleLocalServiceUtil.getRole(user.getCompanyId(), "PersonalDelMinisterioSLIC");
			if (rolePersonalDelMinisterio != null && !RoleLocalServiceUtil.hasUserRole(user.getUserId(), rolePersonalDelMinisterio.getRoleId())) {

				List<PersonalDelMinisterio> listPersonalDelMinisterio = PersonalDelMinisterioLocalServiceUtil.findByMail(user.getEmailAddress());
				if (listPersonalDelMinisterio != null && listPersonalDelMinisterio.size() > 0) {
					_log.info("Asignando rol " + rolePersonalDelMinisterio.getName() + " al usuario " + user.getEmailAddress());
					RoleLocalServiceUtil.addUserRoles(user.getUserId(), new long[]{rolePersonalDelMinisterio.getRoleId()});
				}

			}
			
			// es profesor?
			Role roleProfesor = RoleLocalServiceUtil.getRole(user.getCompanyId(), "ProfesorSLIC");
			if (roleProfesor != null && !RoleLocalServiceUtil.hasUserRole(user.getUserId(), roleProfesor.getRoleId())) {

				List<Profesor> listProfesor = ProfesorLocalServiceUtil.findByMail(user.getEmailAddress());
				if (listProfesor != null && listProfesor.size() > 0) {
					_log.info("Asignando rol " + roleProfesor.getName() + " al usuario " + user.getEmailAddress());
					RoleLocalServiceUtil.addUserRoles(user.getUserId(), new long[]{roleProfesor.getRoleId()});
				}

			}

			// es coordinador?
			Role roleCoordinador = RoleLocalServiceUtil.getRole(user.getCompanyId(), "CoordinadorSLIC");
			if (roleCoordinador != null && !RoleLocalServiceUtil.hasUserRole(user.getUserId(), roleCoordinador.getRoleId())) {

				List<Coordinador> listCoordinador = CoordinadorLocalServiceUtil.findByMail(user.getEmailAddress());
				if (listCoordinador != null && listCoordinador.size() > 0) {
					_log.info("Asignando rol " + roleCoordinador.getName() + " al usuario " + user.getEmailAddress());
					RoleLocalServiceUtil.addUserRoles(user.getUserId(), new long[]{roleCoordinador.getRoleId()});
				}

			}

			// es director?
			Role roleDirector = RoleLocalServiceUtil.getRole(user.getCompanyId(), "DirectorSLIC");
			if (roleDirector != null && !RoleLocalServiceUtil.hasUserRole(user.getUserId(), roleDirector.getRoleId())) { 

				List<Director> listDirector = DirectorLocalServiceUtil.findByMail(user.getEmailAddress());
				if (listDirector != null && listDirector.size() > 0) {
					_log.info("Asignando rol " + roleDirector.getName() + " al usuario " + user.getEmailAddress());
					RoleLocalServiceUtil.addUserRoles(user.getUserId(), new long[]{roleDirector.getRoleId()});
				}

			}

			/*
			Role roleDirector = RoleLocalServiceUtil.getRole(user.getCompanyId(), "DirectorSLIC");
			if (roleDirector != null && !RoleLocalServiceUtil.hasUserRole(user.getUserId(), roleDirector.getRoleId())) { 

				Map<String, String> mapQuery = new HashMap<String, String>();
				mapQuery.put("emails", user.getEmailAddress());
				List<Escuela> listEscuela = EscuelaLocalServiceUtil.findByMap(mapQuery);

				if (listEscuela != null) {
					outLoop:
					for (Escuela escuela : listEscuela) {
						if (escuela.getEmails() != null) {
							String[] arrMailEscuela = escuela.getEmails().trim().split(",");

							for (String mailEscuela : arrMailEscuela) {
								if (user.getEmailAddress().equals(mailEscuela.trim())) {
									_log.info("Asignando rol " + roleDirector.getName() + " al usuario " + user.getEmailAddress());
									RoleLocalServiceUtil.addUserRoles(user.getUserId(), new long[]{roleDirector.getRoleId()});
									break outLoop;
								}
							}
						}
					}
				}

			}
			*/

		}
		catch (Exception e) {
			_log.error(e);
		}

	}

}
